<?php 
/*
 *mysql操作的系列函数	
 *@author xiaosa
 *
 */
 /***************************************************************/
//链接数据库, 成功返回一个资源 

function mConn(){
	//静态变量使同一个页面,数据库只连接一次
	static $conn = null;
	if ($conn === null) {
		$cfg = require(ROOT.'/lib/config.php');
		$conn = mysql_connect($cfg['host'],$cfg['user'],$cfg['password']);
		mysql_query('use '.$cfg['db'],$conn);
		mysql_query('set names '.$cfg['charset'],$conn);
	}
	return $conn;
}

/**************************************************************/
/*
 *执行sql语句
 *
 * @param string $sql
 * @return mixed 返回布尔型值,资源
 */


function mQuery($sql){
	$res = mysql_query($sql,mConn());
	if (!$res) {
		mLog($sql."\n".mysql_error());
	}else{
		mLog($sql);
	}
	return $res;
}

/*************************************************************/
/*
 *查询select语句并返回多行数据,适用于查询多条数据
 *@param string $sql select语句
 *@return mixed array 查询到返回二维数组,未查询到返回false
 */

function mGetAll($sql){
	$rs = mQuery($sql);
	if (!$rs) {
		return false;
	} else {
		$data = array();
		while ($row = mysql_fetch_assoc($rs)) {
			$data[] = $row; 
		}
	}
	return $data;
}

/************************************************************/
/*
 *查询select语句并返回一行
 *@param string $sql select 语句
 *@return 查询到返回一维数组,否返回false
 */

function mGetRow($sql){
	$rs = mQuery($sql);
	return $rs ? mysql_fetch_assoc($rs) : false;
}

/*********************************************************/
/*
 *查询select语句并返回给一个单元
 *@param string $sql select语句
 *@return mixed string 返回一个标量值未查到返回false
 */

function mGetOne($sql){
	$rs = mQuery($sql);
    if(!$rs){
    	return false;
    } else {
    	$row = mysql_fetch_row($rs);
    	return $row[0];
    }
}

/************************************************************/
/*
 *拼接sql语句并发送查询
 *@param array $data 要插入或者跟改的数据,键代表列名,值为新值
 *@param sting $table 待插入的表名
 *@param string $act 插入还是更改,默认为插入
 *@param string $where 防止update语句更改忘记加where条件
 */

function mExec($table,$data,$act = 'insert',$where = 'where 0'){
	if ($act == 'insert') {
		$sql = 'insert into ' . $table .'(';
		$sql .= implode(',', array_keys($data)) . ") values ('";
		$sql .= implode("','", array_values($data)) . "')";
		return mQuery($sql);
	} else if ($act = 'update') {
		$sql = "update $table set ";
		foreach ($data as $k => $v) {
			$sql .= $k ."='". $v . "',";
		}
		$sql = rtrim($sql, ',');
        $sql .= ' where ' . $where;
		print_r($sql);
		
		return mQuery($sql); 
	}
}
/**************************************************************/
/*
 *返回最近一次insert产生的主键值
 *return int
 */

function getLastId(){
	return mysql_insert_id(mConn());
}
/*************************************************************/
/*
 *记录执行的sql 以及出错信息
 *@param $log 记录的信息
 */

function mLog($log){
	//$path = '../log/'.date('Y-m-d',time()).'.txt';
	$path = ROOT.'/log/'.date('Y-m-d',time()).'.txt';
	$head = '------------------------------------------------------------'."\n".date('Y-m-d H:i:s',time())."\n".$log."\n".
	'------------------------------------------------------------'."\n"."\n";
	return file_put_contents($path,$head,FILE_APPEND);
}
/******************************************************************/
/*
 *获取来访者的ip
 */
function getIp() {
	static $realip = NULL;
	if ($realip !== NULL) {
	return $realip;
    }

	if (getenv('HTTP_X_FORWARDED_FOR')) {
	    $realip = getenv('HTTP_X_FORWARDED_FOR');
	} elseif (getenv('HTTP_CLIENT_IP')) {
	    $realip = getenv('HTTP_CLIENT_IP');
	} else {
	    $realip = getenv('REMOTE_ADDR');
	} 
	return $realip;
	}
/******************************************************************/
/*
 *分页类函数
 *@param int $sum 总文章数
 *@param int $cnt 每页显示文章数
 *@param int $curr 返回当前页码数
 *@return arr $pages 返回一个页码数 
 */
function cPager($sum,$cnt,$curr){
	//计算最大页码数,假定显示5个页码
	$max = ceil($sum/$cnt);
	//计算最左边页码数
	$left = max($curr - 2,1);
	//计算最右侧页码
	$right = $left + 4;
	$right = min($max,$right);
	//再次确定最左侧页码数
	$left = $right - 4;
	$left = max($left,1);

	//将所得的五个页码数放进数组里
	for ($i=$left; $i <= $right ; $i++) { 
		//$page[$i] = 'page=' . $i;
		$_GET['page'] = $i;
		$page[$i] = http_build_query($_GET);
	}
	return $page;
}


//print_r(cPager(100,10,8));

 ?>
